home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / lib / hdr.h < prev    next >
C/C++ Source or Header  |  1995-05-03  |  4KB  |  122 lines

  1. #include <float.h>
  2. #include <math.h>
  3. #include <machine/endian.h>
  4.  
  5. #if defined(vax)||defined(tahoe)||defined(mmax)
  6. #    include <errno.h>
  7. extern double infnan(int);
  8. #endif
  9.  
  10. #ifdef mmax
  11. #define national    1
  12. #endif
  13.  
  14. /*
  15.  * Define indices into the mantissa side and the exponent side of a fp number.
  16.  *    n0 is the exponent side, n1 is the "other" part
  17.  */
  18. #if BYTE_ORDER == LITTLE_ENDIAN
  19. enum long_order{n0=1,n1=0};
  20. #else
  21. enum long_order{n0=0,n1=1};
  22. #endif
  23.  
  24. #if defined(vax) || defined(tahoe)
  25. #    define    _0x(A,B)    0x##A##B
  26. #    define  NAN(somenum)    0
  27. #else
  28. #    define    _0x(A,B)    0x##B##A
  29. #    define    NAN(somenum)    (somenum != somenum)
  30. #endif
  31.  
  32. /*
  33.  * MEXP(lvalue) extracts the bits of exponent from a FP value
  34.  */
  35. #if defined(vax) || defined(tahoe)
  36. #    define MEXP(lvalue) (((long int*) &lvalue)[n0] & 0x7f800000 )
  37. #    define RESERVED(lvalue) ((((long int*) &lvalue)[n0] & 0xff800000) == 0x80000000)
  38. #else
  39. #    define MEXP(lvalue) (((long int*) &lvalue)[n0] & 0x7ff00000 )
  40. #    define RESERVED(lvalue) (MEXP(lvalue) == 0x7ff00000 )
  41. #endif
  42.  
  43. /*
  44.  * SIGN(lvalue) isolates the sign bit but doesn't move it around
  45.  */
  46. #define SIGN(lvalue) (((long int*) &lvalue)[n0] & 0x80000000 )
  47.  
  48.  
  49. /*
  50.  * Define some magic constants for various architectures....
  51.  */
  52.  
  53. #if defined(vax)||defined(tahoe)    /* VAX D format */
  54.  
  55. /* static double */
  56. /* ln2hi  =  6.9314718055829871446E-1    , Hex  2^  0   *  .B17217F7D00000 */
  57. /* ln2lo  =  1.6465949582897081279E-12   ; Hex  2^-39   *  .E7BCD5E4F1D9CC */
  58. static long     ln2hix[] = { _0x(7217,4031), _0x(0000,f7d0)};
  59. static long     ln2lox[] = { _0x(bcd5,2ce7), _0x(d9cc,e4f1)};
  60. #define    ln2hi    (*(double*)ln2hix)
  61. #define    ln2lo    (*(double*)ln2lox)
  62.  
  63. #else    /* defined(vax)||defined(tahoe) */
  64.  
  65. static double
  66. ln2hi  =  6.9314718036912381649E-1    , /*Hex  2^ -1   *  1.62E42FEE00000 */
  67. ln2lo  =  1.9082149292705877000E-10   ; /*Hex  2^-33   *  1.A39EF35793C76 */
  68.  
  69. #endif    /* defined(vax)||defined(tahoe) */
  70.  
  71. /*
  72.  * Constants:
  73.  * The hexadecimal values are the intended ones for the following constants.
  74.  * The decimal values may be used, provided that the compiler will convert
  75.  * from decimal to binary accurately enough to produce the hexadecimal values
  76.  * shown.
  77.  */
  78.  
  79. #if defined(vax)||defined(tahoe)    /* VAX D format */
  80.  
  81. /* static double */
  82. /* r2p1hi =  2.4142135623730950345E0     , Hex  2^  2   *  .9A827999FCEF32 */
  83. /* r2p1lo =  1.4349369327986523769E-17   , Hex  2^-55   *  .84597D89B3754B */
  84. /* sqrt2  =  1.4142135623730950622E0     ; Hex  2^  1   *  .B504F333F9DE65 */
  85. static long    r2p1hix[] = { _0x(8279,411a), _0x(ef32,99fc)};
  86. static long    r2p1lox[] = { _0x(597d,2484), _0x(754b,89b3)};
  87. static long     sqrt2x[] = { _0x(04f3,40b5), _0x(de65,33f9)};
  88. #define   r2p1hi    (*(double*)r2p1hix)
  89. #define   r2p1lo    (*(double*)r2p1lox)
  90. #define    sqrt2    (*(double*)sqrt2x)
  91. #else    /* defined(vax)||defined(tahoe)    */
  92. static double
  93. r2p1hi =  2.4142135623730949234E0     , /*Hex  2^1     *  1.3504F333F9DE6 */
  94. r2p1lo =  1.2537167179050217666E-16   , /*Hex  2^-53   *  1.21165F626CDD5 */
  95. sqrt2  =  1.4142135623730951455E0     ; /*Hex  2^  0   *  1.6A09E667F3BCD */
  96. #endif    /* defined(vax)||defined(tahoe)    */
  97.  
  98.  
  99. #if defined(vax)||defined(tahoe)
  100. /* static double  */
  101. /* mln2hi =  8.8029691931113054792E1     , Hex  2^  7   *  .B00F33C7E22BDB */
  102. /* mln2lo = -4.9650192275318476525E-16   , Hex  2^-50   * -.8F1B60279E582A */
  103. /* lnovfl =  8.8029691931113053016E1     ; Hex  2^  7   *  .B00F33C7E22BDA */
  104. static long    mln2hix[] = { _0x(0f33,43b0), _0x(2bdb,c7e2)};
  105. static long    mln2lox[] = { _0x(1b60,a70f), _0x(582a,279e)};
  106. static long    lnovflx[] = { _0x(0f33,43b0), _0x(2bda,c7e2)};
  107. #define   mln2hi    (*(double*)mln2hix)
  108. #define   mln2lo    (*(double*)mln2lox)
  109. #define   lnovfl    (*(double*)lnovflx)
  110. #else    /* defined(vax)||defined(tahoe) */
  111. static double
  112. mln2hi =  7.0978271289338397310E2     , /*Hex  2^ 10   *  1.62E42FEFA39EF */
  113. mln2lo =  2.3747039373786107478E-14   , /*Hex  2^-45   *  1.ABC9E3B39803F */
  114. lnovfl =  7.0978271289338397310E2     ; /*Hex  2^  9   *  1.62E42FEFA39EF */
  115. #endif    /* defined(vax)||defined(tahoe) */
  116.  
  117. extern double scalb ( double, int );
  118. extern double copysign ( double, double );
  119. extern int finite( double );
  120. extern double _log__L(double);
  121. extern double _exp__E(double,double);
  122.